<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 箭头函数有几个使用注意点。
    // 1. 箭头函数没有自己的this指向, 它的this依赖于箭头函数定义时上层作用域的this, (简单的来说,就是依赖于父作用域的this指向 => 箭头函数中遇到this,就向外跳一层找父作用域,如果父作用域也是箭头函数,就继续向外跳一层, 依次类推,直到全局为止)
    // 2. 箭头函数不能作为构造函数  (记忆) 
    // 3. 不可以使用arguments对象，该对象在函数体内不存在。如果要用，可以用 rest 参数代替。

    // arguments 是函数的内置参数 => 函数在调用时实际参数的集合
    // function fn(){
    //     console.log(arguments);
    // }
    // fn(1,4,7,2,5,8,3,6,9);
    // fn(1,2,3,4,5);

    // 扩展运算符(...) 一般用法 => 已知是数组,展开得到逗号分隔的参数序列
    // var list = [1,4,7,2,5,8,3,6,9]
    // ...list => 1,4,7,2,5,8,3,6,9 

    // 箭头函数没有arguments  => 使用arguments会报错
    // 如果要用，可以用 rest 参数代替。
    
    // rest 参数,合并剩余参数  将剩余参数整合到数组中 =>扩展运算符的逆应用
    //  展开之后是逗号分隔的参数序列, 反推 => 展开之前数组
    //  展开之后是逗号分隔的键值对序列, 反推 => 展开之前对象 (不适用于函数)
    //  注意: Rest参数必须是最后一个正式参数
    
    
    // let fn = (...list) => {
    //     console.log(list);
    // }
    // fn(1,4,7,2,5,8,3,6,9);


    // 形参和实参一一对应
    // a => 1
    // b => 4
    // ...list => 7,2,5,8,3,6,9   反推: list就是数组 [7,2,5,8,3,6,9]
    // let fn = (a,b,...list) => {
    //     console.log(arguments);
    // }
    // fn(1,4,7,2,5,8,3,6,9);

    // 报错: Rest参数必须是最后一个正式参数
    // let fn = (a,...list,b) => {
    //     console.log(arguments);
    // }
    // fn(1,4,7,2,5,8,3,6,9);


   



</script>
</html>